#from pyramid.response import Response
#from pyramid.view import view_config

#from sqlalchemy.exc import DBAPIError

import math
from operator import itemgetter

import formencode

from pyramid_simpleform import Form
from pyramid_simpleform.renderers import FormRenderer

from pyramid.view import view_config
from pyramid.url import route_url
from pyramid.renderers import render
from pyramid.httpexceptions import HTTPMovedPermanently
from pyramid.httpexceptions import HTTPFound
from pyramid.httpexceptions import HTTPNotFound
from pyramid.security import authenticated_userid, remember, forget

from pdm.models import DBSession
from pdm.models import User
from pdm.models import Rol
from pdm.models import Proyecto

@view_config(permission='view', route_name='home',
             renderer='templates/login.pt')
def home_view(request):
	
    return {
    }

@view_config( route_name='login', renderer = "json")
def login_view(request):
    post_data = request.POST
    if 'submit' in post_data:
        login = post_data['login']
        password = post_data['password']

        if User.check_password(login, password):
			headers = remember(request, login)
			return {'success' : True} 
	return {'failure' : True}


@view_config(route_name='index',
             renderer='templates/index.pt')
def index_view(request):
	
    return {
    }	


@view_config(route_name='registrarUsuario',
             renderer='templates/add_usuario.pt')
def registrarUsuario_view(request):
	
    return {
    }	


@view_config(route_name='add_usuario',
             renderer='json')
def add_usuario_view(request):
	post_data = request.POST
	
	password1 = post_data['password']
	password2 = post_data['confirmar_password']
	
	if password1 == password2:	
		if 'submit' in post_data:
			session = DBSession()
			user = User(
				username=post_data['usuario'],
				password=post_data['password'],
				name=post_data['nombre_usuario'],
				apellido=post_data['apellido'],
				telefono=post_data['telefono'],
				email=post_data['email']
			)
			session.add(user)
			return {'success' : True}

	return {'failure' : True}  
	

@view_config(route_name='consulta_usuario',
             renderer='json')
def consulta_usuario_view(request):	
	lista_usuarios =	User.get_all_user()
	prueba = []
	for usuario in lista_usuarios:
		diccionario_usuario = {
			'user_id': usuario.user_id,			
			'username': usuario.username,
			'name': usuario.name,			
			'apellido': usuario.apellido,
			'email': usuario.email,
			'telefono': usuario.telefono,
			'creado': str(usuario.creado)
		}
		prueba.append(diccionario_usuario)
	
	root={'success:':True, 'usuarios': prueba}

	return root      

@view_config(route_name='delete_usuario',
             renderer='json')
def delete_usuario_view(request):
	print "\n"
	print "\n"
	post_data = request.POST
	
	print post_data['user_id']
	User.eliminar_user(post_data['user_id'])		
	print "\n"
	print "entre al eliminar"
	return {'success:':True}	

@view_config(route_name='modificar_usuario',
             renderer='json')
def modificar_usuario_view(request):
	post_data = request.POST
	a = post_data['user_id']
	b = post_data['username']
	c =  post_data['name']
	d =  post_data['apellido']
	e =  post_data['email']
	
	User.modificar_user(a, b, c, d, e)
	
	
	return {'success':True}	
	
	
	

@view_config(route_name='registrar_rol', renderer='templates/add_rol.pt')
def registrar_rol_view(request):
	
    return {
    }	


@view_config(route_name='add_rol', renderer='json')
def add_rol_view(request):
	post_data = request.POST
	
	
	if 'submit' in post_data:
		session = DBSession()
		rol = Rol(
			nombre_rol=post_data['nombre_rol'],				
			descripcion=post_data['descripcion']
		)
		session.add(rol)
		return {'success' : True}

	return {'failure' : True}  
	

@view_config(route_name='consulta_rol', renderer='json')
def consulta_rol_view(request):	
	lista_rol =	Rol.get_all_rol()
	v_diccionario = []
	for rol in lista_rol:
		diccionario_rol = {
			'id_rol': rol.id_rol,			
			'nombre_rol': rol.nombre_rol,
			'descripcion': rol.descripcion,						
			'creado': str(rol.creado)
		}
		v_diccionario.append(diccionario_rol)
	
	root={'success:':True, 'rols': v_diccionario}

	return root      

@view_config(route_name='delete_rol', renderer='json')
def delete_rol_view(request):
	print "\n"
	print "\n"
	post_data = request.POST
	
	print post_data['id_rol']
	Rol.eliminar_rol(post_data['id_rol'])		
	print "\n"
	print "entre al eliminar"
	return {'success:':True}	

@view_config(route_name='modificar_rol', renderer='json')
def modificar_rol_view(request):
	post_data = request.POST
	a = post_data['id_rol']
	b = post_data['nombre_rol']
	c =  post_data['descripcion']
	
	Rol.modificar_rol(a, b, c)
	
	
	return {'success':True}


#################################################################################
#############################   Proyecto  #######################################
#################################################################################

@view_config(route_name='registrar_proyecto', renderer='templates/add_proyecto.pt')
def registrar_proyecto_view(request):
	
    return {
    }	


@view_config(route_name='add_proyecto', renderer='json')
def add_proyecto_view(request):
	post_data = request.POST
	
	
	if 'submit' in post_data:
		session = DBSession()
		proyecto = Proyecto(
			nombre=post_data['nombre'],				
			descripcion=post_data['descripcion'],
			numero_fases=post_data['numero_fases']
		)
		session.add(proyecto)
		return {'success' : True}

	return {'failure' : True}  
	

@view_config(route_name='consulta_proyecto', renderer='json')
def consulta_proyecto_view(request):	
	lista_proyecto =	Proyecto.get_all_proyecto()
	v_diccionario = []
	for proyecto in lista_proyecto:
		diccionario_proyecto = {
			'id_proyecto': proyecto.id_proyecto,			
			'nombre': proyecto.nombre,
			'descripcion': proyecto.descripcion,
			'numero_fases': proyecto.numero_fases,						
			'fecha_creacion': str(proyecto.fecha_creacion)
		}
		v_diccionario.append(diccionario_proyecto)
	
	root={'success:':True, 'proyectos': v_diccionario}

	return root      

@view_config(route_name='delete_proyecto', renderer='json')
def delete_proyecto_view(request):
	print "\n"
	print "\n"
	post_data = request.POST
	
	print post_data['id_proyecto']
	Proyecto.eliminar_proyecto(post_data['id_proyecto'])		
	print "\n"
	print "entre al eliminar"
	return {'success:':True}	

@view_config(route_name='modificar_proyecto', renderer='json')
def modificar_proyecto_view(request):
	post_data = request.POST
	a = post_data['id_proyecto']
	b = post_data['nombre']
	c =  post_data['descripcion']
	d =  post_data['numero_fases']
	
	Proyecto.modificar_proyecto(a, b, c,d)
	
	
	return {'success':True}
